#
# Created with PyCharm.
# Description :
# User: jiume
# Date: 2024-12-08
# Time: 9:03
#
from tkinter.font import names


# class Dog():
#     # 首尾双线划线 ——> 特殊方法
#     def __init__(self, name, age):
#         # 双下划线开头 ——> private修饰，只能在类内访问
#         self.__name = name
#         # 单下划线开头 ——> protected修饰，在类内与子类才能访问
#         self._age = age
#
#     # 单下划线开头 ——> protected修饰，在类内与子类才能访问
#     def _fun1(self):
#         print('这是被protected所修饰的方法')
#     # 双下划线开头 ——> private修饰，在类内才能访问
#     def __fun2(self):
#         print('这是被private所修饰的方法')
#
# # 这里是类外了
# dog = Dog('大白', 5)
# print(dog._age)
# # print(dog.__name)
# dog._fun1()
# # dog.__fun2()
# # 和上面一样，直接去访问的话，就会报错，
# # 但是我们可以使用 对象.__dir()__ 或者 dir(对象) 先去查看所有的属性与方法
# # 然后通过其中的"属性"与"方法名"去调用真正的属性与方法
# print(dog.__dir__())
# # print(dir(dog))
#
# print(dog._Dog__name)
# dog._Dog__fun2()


# class Dog():
#     def __init__(self, name, age):
#         self.__name = name
#         self.age = age
#
#     # 如果想要去访问除了，使用dir()之外，还有两种方式:
#
#     # 使用实例方法去间接访问与修改
#     def get_name(self):
#         return self.__name
#     def set_name(self, name):
#         self.__name = name
#
#     # 使用@property装饰器,将方法转为属性使用
#     @property
#     def name(self):
#         return self.__name
#     @name.setter
#     def name(self, name):
#         self.__name = name
#
# dog = Dog('大白', 5)
# # 1、通过实例方法的形式去使用
# print(dog.get_name())
# dog.set_name('小白')
# print('='*15)
# # 2、通过@property装饰器，将方法转为属性
# print(dog.name)
# dog.name = '大白' # 修改属性的样式，去传参
# print(dog._Dog__name)
# print('='*15)
# dog._Dog__name = '小白'
# print(dog._Dog__name)

# # 默认继承object类，但是这个可以不写
# class Animal(object):
#     def __init__(self, name, age, gender,sort):
#         self.name = name
#         self.age = age
#         self.gender = gender
#         self.__sort = sort
#
#
# class Dog(Animal):
#     pass

# # 子类继承父类，会将父类中除private修饰的方法与属性全部拿过来
# # 继承了 __init__方法，以及 name、age、gender属性
# dog = Dog('大白', 5, '男', '中华田园犬')
# print(dog.name)
# print(dog.age)
# print(dog.gender)
# # 同样需要特殊手段才能访问到
# print(dog._Animal__sort)
